\begin{tikzpicture}

	\definecolor{corecolor} {rgb}{0.7,0.8,0.9}

	\tikzstyle{treenode} = [component, path fading=flow fade, align=center,
	                        rounded corners=1]

	\tikzstyle{subsystem} = [minimum width=6ex, minimum height=3ex, align=center,
	                         draw=black!80, fill=white, fill opacity=0.6]

	%
	% Core
	%

	\node[treenode, bottom color=corecolor, minimum width=30ex, minimum height=6ex] (core) {};
	\path (core.east) node[left=1ex] {Core};

	\path (core.west)    node[right=1ex, subsystem] (coreram) {RAM};
	\path (coreram.east) node[right=1ex, subsystem] (corerm)  {RM};
	\path (corerm.east)  node[right=1ex, subsystem] (corecpu) {CPU};

	%
	% Component
	%
	\node[treenode, minimum width=30ex, minimum height=6ex, above=8ex of core] (target) {};
	\path (target.center) node {Component};

	\coordinate (componentram) at (coreram |- target.south);
	\coordinate (componentrm)  at (corerm  |- target.south);
	\coordinate (componentcpu) at (corecpu |- target.south);

	\path (coreram) -- coordinate (midram) (componentram);
	\path (corerm)  -- coordinate (midrm)  (componentrm);
	\path (corecpu) -- coordinate (midcpu) (componentcpu);

	\draw (componentram) -- (midram);
	\draw[arrow, densely dashed] (midram) -- (coreram);

	\draw (componentrm) -- (midrm);
	\draw[arrow, densely dashed] (midrm) -- (corerm);

	\draw (componentcpu) -- (midcpu);
	\draw[arrow, densely dashed] (midcpu) -- (corecpu);

	%
	% Service
	%
	\path (target.east) node[treenode, right=4ex, minimum width=10ex, minimum height=5ex]
		(service) {Service};

	\path (componentcpu)+(7ex,0) coordinate (componentclient) {};

	\tikzstyle{treesessionarrow} = [arrow, thick, densely dashed]

	% target -> service
	\path[treesessionarrow] (componentclient.290)
		.. controls +(290:7ex) and +(250:7ex) .. (service.250);

\end{tikzpicture}
